package com.zzh.zzhaiagent.controller;

import cn.hutool.core.util.StrUtil;
import com.wf.captcha.SpecCaptcha;
import com.zzh.zzhaiagent.exception.BusinessException;
import com.zzh.zzhaiagent.service.EmailService;
import com.zzh.zzhaiagent.utils.ResultCodeEnum;
import com.zzh.zzhaiagent.utils.ResultUtils;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

/**
 * @author: zzh
 * @date: 2025/05/29 10:42:00
 * @version: 1.0
 */
//专门实现发送验证码的接口(可以是图片验证码，也可以是短信验证码，又或者邮箱验证码)
@RestController
@RequestMapping("/code")
public class CodeController {

    @Resource
    private EmailService emailService;

    /**
     * 发送获取验证码
     * @return String
     */
    @GetMapping("/email")
    public ResultUtils<String> sendEmailCode(@RequestParam("toEmail") String toEmail) {
        if (StrUtil.isBlank(toEmail)){
            throw new BusinessException(ResultCodeEnum.PARAMS_ERROR);
        }
        if (emailService.sendMsg(toEmail)){
            return ResultUtils.ok("验证码发送成功");
        }
        return ResultUtils.fail("验证码发送失败");
    }

    /**
     * 获取登录验证码图片base（可以分割开一个服务最好，不然很多的请求(很多的用户)打到这里）
     * @return String
     */
    @GetMapping("/captcha")
    public ResultUtils<Map<String, String>> getLoginCodeByCaptcha() {
        Map<String, String> resultMap = new HashMap<>();
        // 算术类型验证码
        //ArithmeticCaptcha captcha = new ArithmeticCaptcha();
        //中文类型验证吗
        //ChineseCaptcha captcha = new ChineseCaptcha();
        // 英文与数字验证码
        SpecCaptcha captcha = new SpecCaptcha();
        //英文与数字动态验证码
        //GifCaptcha captcha = new GifCaptcha();
        //中文动态验证码
        //ChineseGifCaptcha captcha = new ChineseGifCaptcha();
        // N位运算, 默认两位，其他类型验证码时设置长度
        captcha.setLen(6);
        // 获取计算的结果, 进行存储
        String result = captcha.text();
        String key = UUID.randomUUID().toString();
        // 对生成的key值进行MD5加密，MD5工具类应用，可自行处理
        // 此处为redis工具类封装，设置key, value, key有效期
        //我们还是采用前端校验，把code传过去（图片的code就没必要去放在redis了）
        //stringRedisTemplate.opsForValue().set(key, result, 70, TimeUnit.SECONDS);

        //返回前端
        resultMap.put("verifyCodeKey", key);
        resultMap.put("verifyCode", captcha.toBase64());
        resultMap.put("code", result);
        return ResultUtils.ok(resultMap);
    }

    /**
     * 手机验证码发送
     * @return String
     */
    public ResultUtils<String> sendPhoneCode(String phone){
        return null;
    }


}
